{
  // 布尔值
  let b: boolean = true;
  // 编译通过
  // let createByNewBoolean: boolean = new Boolean(1);
  let createByNewBoolean: Boolean = new Boolean(1);
  console.log(createByNewBoolean);
  // 使用构造函数实例的对象不是布尔值。返回的是一个布尔对象。

  let createByBoolean: boolean = Boolean(1);
  console.log(createByBoolean);
  // 直接调用 Boolean 返回的是一个 boolean 类型。

  // 数值
  // 十进制
  let n: number = 6;
  console.log("n:", n);

  // 十六进制
  let n2: number = 0xf00d;
  console.log("n2:", n2);

  // 二进制（ES6）会被编译为十进制数字。
  let n3: number = 0b1010;
  console.log("n3:", n3);

  // 八进制（ES6）会被编译为十进制数字。
  let n4: number = 0o744;
  console.log("n4:", n4);

  // 非数字的值
  let n5: number = NaN;
  console.log("n5:", n5);

  // 无穷大
  let n6: number = Infinity;
  console.log("n6:", n6);

  // 字符串
  let s: string = "Tom";
  // 模板字符串（ES6）
  let s2: string = `Hello, my name is ${s}.
I'll be ${n + 1} years old next month`;
  console.log("自我介绍：", s2);

  // 空值
  // Void , JavaScript 中没有 void 的概念，在 TypeScript 中，可以用 void 表示没有返回值的函数
  function fn(): void {
    alert("My name is Tom");
  }
  // fn();

  // null
  let nu: null = null;
  console.log(nu);

  // undefined
  let un: undefined = undefined;
  console.log(un);

  // 类型推论（根据字面值类型推出）
  let x = "h";
  // Type 'number' is not assignable to type 'string'.
  // x = 1;
  // 当不能推理出确定类型时怎么处理

  // Any 任意值
  let a: any = "H";
  a = 123;
  // 在任意值上访问任何属性都是允许的
  a.a;

  //never 从不
  // 表明该函数没有返回, 永远都没有返回值
  function fn2(): never {
    // 1. 死循环
    // while(true){
    //   console.log('run run run');
    // }
    //2. 抛出错误
    throw new Error("出问题啦~~");
  }
  // fn2();

  // 对象类型
  let o: object = {};
  o = [];
  o = function () {};

  // 数组 相同类型
  let arr: string[];
  arr = ["1", "2", "3", "4", "5"];
  // arr = [1, 2];
  arr.push("6");
  console.log(arr);
  let arr1 = Array<String>; // 泛型

  // 元组 不同类型
  let tuple: [string, number];
  tuple = ["Tom", 25];
  console.log(tuple);

  // 枚举
  // enum Days {
  //   Sun,
  //   Mon,
  //   Tue,
  //   Wed,
  //   Thu,
  //   Fri,
  //   Sat,
  // }

  // 手动赋值 后续未手动赋值的项的递增步长仍为 1
  enum Days {
    Sun = 7,
    Mon = 1,
    Tue,
    Wed,
    Thu,
    Fri,
    Sat,
  }
}
